package MediciADistanza.Boundary.user.Module;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JInternalFrame;

import MediciADistanza.Control.User.Module.ModuleControl;


/**
 * Modulo compilabile da utenti
 * 
 * 
 *  <p>Semi-implementata</p>
 * 
 * @author Andrea Iann&igrave;
 */
public abstract class Modulo extends JInternalFrame{//Da rinominare!!!
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * Bottono di invio modulo
	 */
	protected JButton invia; 
	/**
	 * Bottone di uscita dal modulo
	 */
	protected JButton esci;
	/**
	 * Control del modulo
	 */
	protected ModuleControl moduleControl;
	
	/**
	 * Inizializza l'interfaccia assegnando il control
	 * 
	 * <p><b>Si devono aggiungire i tasti invia ed esci all'interfaccia!!!</b></p>
	 * 
	 * @param control	Control chiamante
	 */
	public Modulo (ModuleControl control) {
		super();
		
		invia = new JButton("Invia");
		esci = new JButton("Esci");
		
		invia.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				premiInvia();
			}
		});
		esci.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				premiEsci();
			}
		});
		
		moduleControl = control;
	}
	/**
	 * Viene chiamata quando viene premuto il tasto invia
	 * 
	 * esse deve validare e colorare di rosso l'input inserito se sbagliato, per farlo usa la funzione {@link Modulo#validateInput()}
	 */
	private void premiInvia() {
		if(validateInput())
			moduleControl.sendModule();
	}
	/**
	 * Viene chiamata quando viene premuto il tasto esci
	 */
	private void premiEsci() {
		moduleControl.exit();
	}
	/**
	 * Viene richiamata alla pressione del tasto invia, valida l'input inserito e segnala quello non valido
	 */
	protected abstract boolean validateInput();
}

